package com.snowy.hidden.biz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.snowy.framework.common.base.vo.LoginUser;
import com.snowy.framework.common.resp.BaseResp;
import com.snowy.hidden.biz.domain.model.Task;
import com.snowy.hidden.biz.domain.req.*;
import com.snowy.hidden.biz.domain.resp.TaskDetailResp;
import com.snowy.hidden.biz.domain.resp.TaskListAssigmentResp;
import com.snowy.hidden.biz.domain.resp.TaskListResp;

import java.util.List;

/**
 * 任务表(Task)表服务接口
 *
 * @author cl
 * @since 2025-11-13 13:56:05
 */
public interface TaskService extends IService<Task>{

    /**
     * 添加任务
     * @param taskAddReq
     * @param userInfo
     * @return
     */
    BaseResp addTask(TaskAddReq taskAddReq, LoginUser userInfo);

    /**
     * 任务列表查询
     * @param taskListReq
     * @return
     */
    BaseResp<List<TaskListResp>> queryTaskList(TaskListReq taskListReq);

    /**
     * 获取待审批任务列表
     * @param taskListReq
     * @return
     */
    BaseResp<List<TaskListResp>> queryApprovalTaskList(TaskListReq taskListReq);

    /**
     * 获取任务详情
     * @param taskDetailReq
     * @return
     */
    BaseResp<TaskDetailResp> queryTaskDetail(TaskDetailReq taskDetailReq);

    /**
     * 分管领导任务审核
     * @param taskAuditReq
     * @return
     */
    BaseResp chargeAudit(TaskAuditReq taskAuditReq);

    /**
     * 任务申请
     * @param taskAuditReq
     * @return
     */
    BaseResp taskAssignment(TaskAuditReq taskAuditReq);

    /**
     * 获取小程序待指派任务列表
     * @param taskListReq
     * @return
     */
    BaseResp<List<TaskListResp>> queryTaskListByApplet(TaskListReq taskListReq);

    /**
     * 获取已经申请的任务列表
     * @param taskListReq
     * @return
     */
    BaseResp<List<TaskListAssigmentResp>> queryTaskListByApply(TaskListReq taskListReq);

    /**
     * 添加指派人员
     * @param assigmentUserReq
     * @return
     */
    BaseResp assignmentUser(AssigmentUserReq assigmentUserReq);

    /**
     * 获取小程序任务列表
     * @param taskListReq
     * @return
     */
    BaseResp<List<TaskListResp>> myTaskList(TaskListReq taskListReq);

    /**
     * 提交任务日志
     * @param taskLogSubmitReq
     * @return
     */
    BaseResp submitTaskLog(TaskLogSubmitReq taskLogSubmitReq);

    /**
     * 获取任务日志列表
     * @param taskLogSubmitReq
     * @return
     */
    BaseResp taskLogListById(TaskLogSubmitReq taskLogSubmitReq);

    /**
     * 评价任务
     * @param taskJudgeReq
     * @return
     */
    BaseResp taskJudge(TaskJudgeReq taskJudgeReq);
}
